package com.yeti.service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.yeti.domain.Cliente;
import com.yeti.domain.Lista;
import com.yeti.repository.ClienteDAO;

@Component
public class AdministradorServiceImpl implements AdministradorService{

	@Autowired
	ClienteDAO clienteDao;
	
	private static int ITEMS_PER_PAGE = 10;
	
	/**
	 * Metodo que devuelve el listado de los clientes del sistema.
	 * 
	 * @return devuelve los clientes del sistema.
	 */
	@Override
	public ArrayList<Cliente> getClientes() {
		return clienteDao.getClientes();
	}
	
	/**
	 * Metodo que devuelve el listado de los clientes del sistema paginado.
	 * 
	 * @param page: Es la página a obtener.
	 * @return devuelve los clientes del sistema.
	 */
	@Override
	public ArrayList<Object> getClientes(int page) {

		int min_index,max_index = 0;
		
		int totalPaginas = 1;
		
		ArrayList<Object> clientes = new ArrayList<Object>();
		
		List<Cliente> lista_paginada = clienteDao.getClientes();
		
		Collections.reverse(lista_paginada);
		
		int size = lista_paginada.size();
		
		min_index = (page-1) * ITEMS_PER_PAGE;
		max_index = page * ITEMS_PER_PAGE;
		
		if(min_index>=size){
			return null;
		}
		
		if(max_index>size){
			max_index = size;
		}
		
		clientes.add(0, lista_paginada.subList(min_index, max_index));
		
		totalPaginas = size/ITEMS_PER_PAGE;
		
		if(size%ITEMS_PER_PAGE!=0){
			totalPaginas++;
		}
		
		clientes.add(1, totalPaginas);
		
		return clientes;
	}
	
	/**
	 * Metodo que habilita o deshabilita a un usuario.
	 * 
	 * @param id: Es el id del cliente a habilitar/deshabilitar.
	 * @param enabled: Es el valor que se le aplicará al campo enabled.
	 * 
	 */
	@Override
	@Transactional(readOnly=false)
	public void setClienteEnabled(int id,boolean enabled) {
		Cliente c = clienteDao.getCliente(id);
		c.setEnabled(enabled);
		clienteDao.updateCliente(c);
	}
}
